home *** CD-ROM | disk | FTP | other *** search
/ The Hacker Chronicles - A…the Computer Underground / The Hacker Chronicles - A Tour of the Computer Underground (P-80 Systems).iso / phreak / callerid.txt < prev    next >
Text File  |  1992-09-26  |  18KB  |  527 lines

  1. --NOTE!:
  2. -- The original file for this text disappeared. All of the text below
  3. --was scanned from the printouts on hand. Please check for subtle
  4. --errors  in code listing (eg.  l instead of 1).
  5. --
  6.  
  7. --===========================================================
  8. Information on CALLID.PNT, the Caller*Id to RS-232 interface MacPaint file
  9. in this forum: [Converted to gif for IBM users]
  10.  
  11. Several states now offer Caller*Id services.  Caller*Id is an extra price option,
  12. available from your local telephone company, that provides the telephone number
  13. of the person calling you.  The telephone number is delivered to a separate unit,
  14. the Caller*Id interface.  This interface is available from several dealers
  15. (Sears, AT&T Phone Stores, etc), and must be purchased separately.
  16. The current model is the 125C, priced at about $60 from Sears.
  17.  
  18. All the interface units (125, 125A, 125B and the current 125C) have the same
  19. drawback: they only display the telephone number of the caller, not the caller's
  20. name.  That can make it difficult to "filter" people you don't want to talk to
  21. (like that annoying magazine subscription person).
  22.  
  23. The circuit in CALLID.PNT provides a method of obtaining that information.
  24. Inside all of the Caller*Id interfaces is an XR2211 integrated circuit.  This
  25. "chip" has as it's output the data stream containing the information sent over
  26. the telephone line (for you techies, it's a Bell 202 data stream, sent between
  27. the first and second ring).
  28.  
  29. All that is necessary to connect the Caller*Id unit to your RS-232 port are:
  30. an MC1488 integrated circuit (available from Radio Shack, for about $l) and
  31. a resistor (lOOK Ohm 1/4 watt, also available from Radio Shack).
  32.  
  33. The MC1488 "boosts" the output voltage to the level expected by the RS-232 port
  34. on your computer, and the resistor provides some isolation and reduces the
  35. voltage drop on the output of the MC1488.
  36.  
  37. The MC1488 needs a +/- 12volt power supply.  If you have one, you're all set.
  38. If not, Radio Shack sells small 9 volt power supplies for S5-6 each; you can
  39. put two back-to-back to get a +/- 9 volt supply, which is close enough.
  40. You could use a couple of 9volt batteries, too.
  41.  
  42. Everything, excluding the power supplies, fits into the Caller*id interface case.
  43. I used a little hot-melt glue to place the MC1488 in an unused circuit board
  44. area (watch out for the plastic standoffs on the case!).  Small gauge wire
  45. (or wire-wrap wire) connects the components together.  If you're uncomfortable
  46. soldering to the integrated circuits, you can pick up IC jumper clips at Radio
  47. Shack as well (that way you can easily remove the "modification").
  48.  
  49. I bring the RS-232 pin 3 and pin 7 connections to a 1/8 inch mini-phone jack,
  50. which I mounted on the case near the existing telephone jacks.
  51.  
  52. Once the circuit is built, what do you do with it?  I use a Hypercard Stack
  53. built on the EXCELLENT Portfolio Hyper System (PHS), by Bob Davis 70625,717,
  54. to look up the phone number, announce the caller (using Macintalk) and provide
  55. filtering (based on time of day and flags on the caller's record).  I log all
  56. incoming calls, both to a separate file and to the record of the caller.
  57.  
  58. My stack also contains records for telephone exchanges, so if the specific
  59. number is not found, it will announce where (what town) the call is coming from.
  60.  
  61. In addition, since I have two Macintosh computers, I broadcast the information
  62. over Appletalk, so both machines can announce the caller.
  63.  
  64. That should give you enough ideas!  Following is an extract of the major portion
  65. of the Hypercard script I use.  I can't upload the entire stack, since it's part
  66. of PHS.  It should give you enough of the logic needed to build your own
  67. application.
  68.  
  69. By the way, all of this is PUBLIC DOMAIN, for NON-COMERCIAL USE.
  70. If you want to sell something with this, send me an EMAIL and we can discuss it.
  71.  
  72. Mace Moneta
  73. CIS 73167,1546
  74.  
  75.  
  76.  
  77. -- CallerID Support Code - COPYRIGHT 1989, 1990 BY Mace Moneta
  78.  
  79. --===========================================================
  80. -- ALL RIGHTS RESERVED.
  81. -- FOR MORE INFORMATION CONTACT THE AUTHOR DIRECTLY.
  82. -------------------------------------------------------------
  83.  
  84. --
  85. -- Put the IDLE handler to sleep while editing a field
  86. --
  87. on openField
  88.   global editingField
  89.   put true into editingField
  90. end openField
  91.  
  92. --
  93. -- Wakeup the IDLE handler when finished field editing
  94. --
  95. on closeField
  96.   global editingField
  97.   put false into editingField
  98. end closeField
  99.  
  100. --
  101. -- OPEN STACK
  102. --
  103.  
  104. on openStack
  105.  
  106.   --
  107.   -- Cache the stack in memory for fastest access
  108.   --
  109.   set cursor to watch
  110.   set lockScreen to true
  111.   show all cards
  112.   set lockScreen to false
  113.   set cursor to none
  114.   --
  115.   -- Initialize Variables
  116.   --
  117.   global editingField,lastLookup
  118.   global globalATPData, globalResponseData
  119.   global globalReceiveData, myEntityName
  120.   global globalSKTData, globalNBPData
  121.   global modemData,myName,serverName,EotDC2,EotHT
  122.   global soundList,soundCount,serialBuffer
  123.   put false into editingField
  124.   put sndList() into soundList
  125.   put the number of lines in soundList into soundCount
  126.   put empty into globalResponseData
  127.   put empty into globalAppleTalkData
  128.   put empty into modemData
  129.   put empty into serverName
  130.   put numToChar(4) & numToChar(18) into EotDC2
  131.   put numToChar(4) & numToChar(9) into EotHT
  132.   put the seconds into lastLookup
  133.   --
  134.   -- Before we can become an entity on the network, we must first
  135.   -- open up access to the network.  ATPOPEN performs this function
  136.   -- and relies on the variable "globalAppleTalkDATA".
  137.   -- Since ATPOPEN is not given a parameter, it will open both a client
  138.   -- and a server side allowing us to both issue requests and respond
  139.   -- to requests.
  140.   --
  141.   ATPOpen
  142.   if the result is empty then
  143.     --
  144.     -- If ATPOPEN was successful we can go ahead and register our name
  145.     -- with the network.
  146.     --
  147.     NBPOpen
  148.     --
  149.     -- We'll use the number of elapsed 1/60's of a second since IPL
  150.     --
  151.     -- as our unique "name".
  152.     --
  153.     put the ticks into myName
  154.     put "CallerID" into myType
  155.     NBPRegisterName myName,myType
  156.     if the result is not empty then
  157.       --
  158.       -- We had a problem connecting!
  159.       --
  160.       answer "Error connecting to AppleTalk!" with "Ok"
  161.     end if
  162. end if
  163.  
  164.   --
  165.   -- Initialize the serial port to 1200bps, 1 stop, 8 data bits,
  166.   -- no parity.
  167.   --
  168.   put serialHandler("open","A",1200,8,"none",1,"CTS",1024) B
  169.   into serialBuffer
  170.  
  171. end openStack
  172.  
  173. on goingElsewhere
  174.   --
  175.   -- If we are leaving this stack (quiting or opening another stack)
  176.   -- terminate our session on Appletalk and close the serial port.
  177.   --
  178.   global serialBuffer
  179.   put empty into globalResponseData
  180.   put empty into globalAppleTalkData
  181.   NBPClose
  182.   ATPClose
  183.   get serialHandler("close","A",serialBuffer)
  184. end goingElsewhere
  185.  
  186. --
  187. -- CLOSE STACK
  188. --
  189.  
  190. on closeStack
  191.    goingElsewhere
  192. end closeStack
  193.  
  194. --
  195. -- IDLE
  196. --
  197.  
  198. on idle
  199.   global editingField,lastLookup
  200.   global talkName,talkKeyword,EotDC2,EotHT
  201.   global globalResponseData,globalReceiveData
  202.   global modemData,myName,serverName,dataSource
  203.   global soundList,soundCount,serialBuffer
  204.  
  205.   if editingField then exit idle
  206.  
  207.   --
  208.   -- Initialize variables
  209.   --
  210.   put empty into modemData
  211.   put empty into talkName
  212.   put empty into talkKeyword
  213.   put false into outOfArea
  214.   set cursor to hand
  215.   --
  216.   -- Check for activity on the serial port
  217.   --
  218.   put serialHandler("get","A",3) into modemData
  219.   --
  220.   -- If we got something, remember where it came from.
  221.   --
  222. if modemData is not empty then put "fromComm" into dataSource
  223. --
  224. -- If nothing came in over the serial port, check the other Mac,
  225. -- to see it it got anything
  226. --
  227. -- First, check to see if a "CallerID" server is on the network
  228. -- (a copy of this Hypercard stack, running on another machine)
  229. --
  230. put the seconds into it
  231. if serverName is empty and it > lastLookup then
  232.    set cursor to watch
  233.    put the seconds + 30 into lastLookup
  234.    put NBPLookupNames("CallerID","*","20","2","8") into entityNames
  235.    repeat with x=l to the number of lines in entityNames
  236.       put line x of entityNames into it
  237.       if "CallerID" is in item 2 of it and myName is not in item 1 of it then
  238.         put item 1 of it into serverName
  239.         exit repeat
  240.       end if
  241.    end repeat
  242. end if
  243. --
  244. -- Now ask the network for data
  245. --
  246. if modemData is empty and serverName is not empty then
  247.   ATPReceive "HandleReceive"
  248.   --
  249.   -- If we got something, remember where it came from.
  250.   --
  251.   if modemData is not empty then put "fromAT" into dataSource
  252. end if
  253. --
  254. -- Scan the data for EOT DC2 sequence (header for known number)
  255. -- or EOT HT (header for Out of Area call or Private - Blocked)
  256. --
  257. if modemData is not empty then
  258.   repeat with i = 1 to the length of modemData
  259.   if char i to i+1 of modemData is EotHT then put true into outOfArea
  260.   if char i to i+1 of modemData is EotDC2 or outOfArea then
  261.       --
  262.       -- Header found.  Extract the phone number of the caller
  263.       --
  264.       if outOfArea then
  265.         if char i+6 of modemData is "P" then
  266.           --
  267.           -- We've got a blocked call!  Announce as such by
  268.           -- looking up the record with pseudo phone number
  269.           -- CAL-LER╤IDBL.
  270.           --
  271.           put "CAL" into areaCode
  272.           put "LER" into exchange
  273.           put "IDBL" into number
  274.           put "CAL-LER-IDBL" into phone
  275.           else
  276.           --
  277.           -- Just an out of area call.  Look up the record
  278.           -- with pseudo phone number ???-???-???? and announce.
  279.           --
  280.           put "???" into areaCode
  281.           put "???" into exchange
  282.           put "????" into number
  283.           put "???-???-????" into phone
  284.           end if
  285.           else
  286.         --
  287.         -- We have an actual phone number!
  288.         --
  289.         put char i+10 to i+20 of modemData into phone
  290.         put char 1 to 3 of phone into areaCode
  291.  
  292.    put char 4 to 6 of phone into exchange
  293.    put char 7 to 10 of phone into number
  294.    put areaCode & "-" & exchange & "-" & number into phone
  295.    end if
  296. --
  297. -- If we obtained data from the serial port,
  298. -- see if anyone on the network wants our data
  299. --
  300. if dataSource contains "fromComm" then
  301.    ATPSendRequest serverName,modemData, B
  302.    "HandleSend", 2, 2 0
  303.    --
  304.    -- If we got an error, the server went bye-bye. Clear
  305.    -- the serverName, so that we will re-issue the Lookup
  306.    -- for a server.
  307.    --
  308.    if the result is not empty then put empty into serverName
  309.    put empty into modemData
  310.    end if
  311. --
  312. -- Define a "trunk" number to search for, incase the full
  313. -- number is not found.
  314. --
  315. put areaCode & "-" & exchange & "-" & "????" into trunk
  316. --
  317. -- Search the directory for the phone number.
  318. -- In this stack, each record can contain up to 3 phone
  319. -- numbers. They are kept in the background field variables
  320. -- (bg fld) "Phone1", "Phone2" and "Phone3".
  321. --
  322. get the short name of this card
  323. if it is "Index" then go to next card
  324. find phone in bg fld "Phone1"
  325. if the result is "not found" then
  326.   find phone in bg fld "Phone2"
  327.   if the result is "not found" then
  328.     find phone in bg fld "Phone3"
  329.   end if
  330. end i f
  331. --
  332. -- If the number was not found, see if we have a trunk line
  333. --
  334. if the result is "not found" then
  335.    find trunk in bg fld "Phone1"
  336.    if the result is "not found" then
  337.      find trunk in bg fld "Phone2"
  338.      if the result is "not found" then
  339.        find trunk in bg fld "Phone3"
  340.      end if
  341.    end if
  342. end if
  343. --
  344. -- If we found the entry, extract the callers name and
  345. -- invoke the announceCaller routine
  346. --
  347. if the result is empty then
  348.    put bg fld "Name" into talkName
  349.    put bg fld "Keywords" into talkKeyword
  350.    announceCaller
  351.    --
  352.    -- Annotate the entry so we know the last call date and time
  353.    --
  354.    get line 1 of bg fld "Note"
  355.    if it is "NOTE PAD" or word 1 to 2 of it is "Last Call: " then
  356.      set locktext of bg fld "Note" to false
  357.      put "Last Call: " && the long date && the time B
  358.      into line 1 of bg fld "Note"
  359.      set locktext of bg fld "Note" to true
  360.    else
  361.      set locktext of bg fld "Note" to false
  362.  
  363.             put "Last Call:" && the long date && the time & return B
  364.             before line 1 of bg fld "Note"
  365.             set locktext of bg fld "Note" to true
  366.             end if
  367.           --
  368.           -- An unknown caller; just announce that there is a call
  369.           --
  370.           if talkName is empty then
  371.             put "Unknown Caller NOSUFFIX" into talkKeyword
  372.             put "Telephone Call" into talkName
  373.             announceCaller
  374.             end if
  375.           --
  376.           -- Log the call to file "CallerID Log", if on main machine
  377.           --
  378.           if dataSource contains "fromComm" then
  379.             put "CallerID Log" && word 2 of the long date && B
  380.             word 4 of the long date into logFile
  381.             open file logFile
  382.             --
  383.             -- Position at EOF
  384.             --
  385.             repeat
  386.               read from file logFile for 16834
  387.               if it is empty then exit repeat
  388.               end repeat
  389.             --
  390.             -- Place the data in the log
  391.             --
  392.             put the time into timeStamp
  393.             if the length of timeStamp < 8 Then B
  394.             put "O" & timeStamp into timeStamp
  395.             put the long date into dateStamp
  396.             put word 1 of dateStamp & tab & B
  397.             word 2 to 4 of dateStamp into dateStamp
  398.             write dateStamp & tab & timeStamp & tab & phone & tab & B
  399.             talkName && "(" & talkKeyword & ")" & return B
  400.             to file logFile
  401.             close file logFile
  402.         end if
  403.         exit repeat
  404.      end if
  405.     end if
  406.   end repeat
  407.  end if
  408. end idle
  409.  
  410. --
  411. -- This routine is invoked when someone is requesting our data.
  412. -- Return the last caller info, and clear it.
  413. --
  414. on HandleSend
  415.   global globalResponseData
  416.   put empty into globalResponseData
  417. end HandleSend
  418.  
  419. --
  420. -- A server is responding to our request for the caller information.
  421. -- Place it in modemData, for normal processing.
  422. --
  423. on HandleReceive
  424.   global globalReceiveData,modemData
  425.   if globalReceiveData is not empty then B
  426.   put globalReceiveData into modemData
  427. end HandleReceive
  428.  
  429. --
  430. -- Dummy handler to provide NOP response.  This is automatically
  431. -- invoked by the Appletalk routines, when there is no data to transfer.
  432. --
  433. on okay
  434. end okay
  435.  
  436. --
  437. -- Here we vocalize the name of the caller using MacinTalk, or if a
  438. -- digitized sound is available with the same name, we play the sound.
  439. --
  440. -- Special values may be passed in the Keyword entry of the directory
  441. -- as follows:
  442. --
  443. -- 24HR         - This caller will be announced no matter what time it is.
  444. --                     Normally, calls between lOPM and 5AM are not announced.
  445. -- IGNORE      - This caller will never be announced (call screening).
  446. -- NOSUFFIX  - This caller will not have the "Calling" word appended
  447. --              to his/her name when being announced.  Normally, callers
  448. --              are announced as "name Calling" (eg. Joe Shmoe Calling).
  449. --
  450. on announceCaller
  451.   --
  452.   -- Get the callers name and the keywords defined for him/her
  453.   --
  454.   global talkName,talkKeyword,soundList,soundCount
  455.   --
  456.   -- Get the current hour, in 24 hour format
  457.   --
  458.   put the time into timeCheck
  459.   convert timeCheck to dateitems
  460.  
  461.   -- If it is after 1OPM and before 5AM, don't announce the caller.
  462.   -- If the caller has the special "IGNORE" keyword, never announce
  463.   -- the caller (call screening).
  464.  
  465.   put true into sayingIt
  466.   if item 4 of timeCheck > 22 or B
  467.   item 4 of timeCheck < 5 or B
  468.   talkKeyword contains "IGNORE" then put false into sayingIt
  469.   --
  470.   -- If the caller has the special "24HR" keyword, announce the caller
  471.   -- no matter what time it is.
  472.   --
  473.   if talkKeyword contains "24HR" then put true into sayingIt
  474.  --
  475.  -- If we should announce this caller, do it three times
  476.  --
  477.   if sayingIt then
  478.     put true into soundNotFound
  479.     repeat with soundName = 1 to soundCount
  480.       if line soundName of soundList is talkname then B
  481.       put false into soundNotFound
  482.     end repeat
  483.     put getPVolume() into saveVolume
  484.     setPVolume(7)
  485.     if soundNotFound then
  486.       if "NOSUFFIX" is not in talkKeyword then B
  487.       put talkName && "Calling" into talkName
  488.       talk talkName,140,120
  489.       wait 1 seconds
  490.       talk talkName,140,120
  491.       wait 1 seconds
  492.       talk talkName,140,120
  493.     else
  494.       play talkname
  495.       wait until the sound is "done"
  496.       wait 1 seconds
  497.       play talkname
  498.       wait until the sound is "done"
  499.       wait 1 seconds
  500.       play talkname
  501.       wait until the sound is "done"
  502.       end if
  503.       setPVolume(saveVolume)
  504.     end if
  505. end announceCaller
  506.  
  507. -----------------------------------------------------------
  508. -- CallerID Support Code - COPYRIGHT 1989, 1990 BY Mace Moneta
  509. -- ALL RIGHTS RESERVED.
  510. -- FOR MORE INFORMATION CONTACT THE AUTHOR DIRECTLY.
  511. -----------------------------------------------------------
  512.  
  513.  
  514.  
  515.                                /\   /\
  516.                               /  \ /  \
  517.                              /       /
  518.                             / L&F  DataSEC
  519.                             \ 914-HAK-VMBS
  520.                              \    /  3/12/24 MNP5
  521.                               \  /   PHALCON/SKISM
  522.                                \/         GHQ
  523.  
  524. Downloaded From P-80 Systems 304-744-2253 
  525.  
  526. Downloaded From P-80 International Information Systems 304-744-2253
  527.